/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.gft.bancosimulador.business;
import com.gft.bancosimulador.beans.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author AEPI
 */
public class AgenciaBusiness {
    private List<Agencia> agencias = new ArrayList<Agencia>(); //Agencia se refere ao Bean
    private static final AgenciaBusiness instance = new AgenciaBusiness();  //atributo constante e estatico do tipo instancia
                                                                            
    
    private AgenciaBusiness(){ //para que uma classe nao seja instanciada em nenhuma hipotese seu construtor e declarado como private.
        
    }
    
    public static final AgenciaBusiness getInstance(){ //aqui construtor eh instanciado.
        return instance;
    }
    
    public String cadastrarAgencia(Agencia agencia){ //recebe o bean
        agencia.setCodigo(agencias.size() + 1); //chama o metodo setCodigo do Bean que atribui conforme o tamanho do arraylist (se o tamanho dele eh 10, o proximo codigo sera 11)
        this.agencias.add(agencia); //adiciona informacoes contidas no Bean "agencia" no array agencias
        String mensagem = String.format("Agencia %s - %s cadastrada com sucesso!", 
                                        agencia.getCodigo(),
                                        agencia.getNome()); 
        return new String(mensagem);
    }

    public Agencia consultarAgencia(int codigoAgencia){ //Agencia proveniente do Bean
        Agencia agencia; //variavel agencia do tipo bean
        for (int i = 0; i < agencias.size(); i++){ //vai percorrer cada elemento do arraylist ate seu final
            agencia = agencias.get(i); //Bean recebe o valor da posicao que esta sendo consultada no arraylist
            if (agencia.getCodigo() == codigoAgencia) //verifica se o codigo daquela posicao do arraylist corresponde ao codigo que esta sendo procurado
                return agencia; //retorna o Bean agencia
        }
        return null; //nao retorna nada caso nao ache a agencia
    }

    public String desativarAgencia(Agencia agencia){ //recebe o bean
        Agencia agenciaCadastrada; //novo bean
        for (Iterator i = agencias.iterator(); i.hasNext();){ //forma de percorrer o arraylist
            agenciaCadastrada = (Agencia) i.next(); //agencia cadastrada recebe o valor da posicao que esta sendo consultada
               //if (a == agencia)
            if (agenciaCadastrada.equals(agencia)) //compara se a posicao consultada eh igual a bean que foi passado como parametro
                agenciaCadastrada.setAtiva(false); //caso sim, muda o status para desativado
        }
        String mensagem = String.format("Agencia %s desativada com sucesso!", agencia.getNome());
        return new String(mensagem); //retorna mensagem de sucesso
    }

    public String reativarAgencia(Agencia agencia){
        for (Agencia a:this.agencias){ 
            if (a.equals(agencia))
                a.setAtiva(true);
        }
        String mensagem = String.format("Agencia %s reativada com sucesso!", agencia.getNome());
        return new String(mensagem);
    }

}
